public class Test {
    public static void main(String[] args) {
        Solution A = new Solution();
        System.out.println(A.uniquePaths(23, 12));
    }
}
//排列组合
class Solution {
    public int uniquePaths(int m, int n) {
        long sum = 1;
        for(int i = n,j = 1; i<=m+n-2&&j<=m-1;i++,j++){
            sum = sum*i/j;
        }
        return (int)sum;
    }
}

//类似于递归
class Solution1 {
    public int uniquePaths(int m, int n) {
        int[][] f = new int[m][n];
        for (int i = 0; i < m; ++i) {
            f[i][0] = 1;
        }
        for (int j = 0; j < n; ++j) {
            f[0][j] = 1;
        }
        for (int i = 1; i < m; ++i) {
            for (int j = 1; j < n; ++j) {
                f[i][j] = f[i - 1][j] + f[i][j - 1];
            }
        }
        return f[m - 1][n - 1];
    }
}



